"""
### 决策边界的绘制：
- 构建坐标数据，合理的范围当中，根据实际训练时输入数据来决定
- 整合坐标点，得到所有测试输入数据坐标点
- 预测，得到所有点的概率值
- 绘制等高线，完成决策边界
"""
import numpy as np
from matplotlib import pyplot as plt
from sklearn import datasets
from sklearn.linear_model import LogisticRegression

"""加载内部数据集"""
iris = datasets.load_iris()

"""属于当前类别的为1，属于其他类别的为0"""
X = iris['data'][:, 3:]  # 选择其中一个特征
y = (iris['target'] == 2).astype(np.int32)

"""实例化, 训练模型"""
log_res = LogisticRegression()
log_res.fit(X, y)

"""构建坐标数据"""
x0, x1 = np.meshgrid(np.linspace(2.9, 7, 500).reshape(-1, 1), np.linspace(0.8, 2.7, 200).reshape(-1, 1))
X_new = np.c_[x0.ravel(), x1.ravel()]
y_proba = log_res.predict_proba(X_new)

"""做出来等高线"""
plt.figure(figsize=(10, 4))
plt.plot(X[y == 0, 0], X[y == 0, 1], 'bs')
plt.plot(X[y == 1, 0], X[y == 1, 1], 'g^')
zz = y_proba[:, 1].reshape(x0.shape)
contour = plt.contour(x0, x1, zz, cmap=plt.cm.brg)
plt.clabel(contour, inline=1)
plt.axis([2.9, 7, 0.8, 2.7])
plt.text(3.5, 1.5, 'NOT Vir', fontsize=16, color='b')
plt.text(6.5, 2.3, 'Vir', fontsize=16, color='g')
